﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BlindData
{
	public static class GreaterThanGenerator
	{
		#region int

		/// <summary>
		/// Returns a random int greater than the specified minimum.
		/// </summary>
		/// <param name="minValue">The inclusive lower bound of the random int returned.</param>
		/// <returns></returns>
		public static int GreaterThan(this INext<int> next, int minValue)
		{
			if (next == null)
			{
				throw new ArgumentNullException("next");
			}
			return next.Between(minValue, int.MaxValue);
		}

		#endregion

		#region long

		/// <summary>
		/// Returns a random long greater than the specified minimum.
		/// </summary>
		/// <param name="minValue">The inclusive lower bound of the random long returned.</param>
		/// <returns></returns>
		public static long GreaterThan(this INext<long> next, long minValue)
		{
			if (next == null)
			{
				throw new ArgumentNullException("next");
			}
			return next.Between(minValue, long.MaxValue);
		}

		#endregion

		#region double

		/// <summary>
		/// Returns a random double greater than the specified minimum.
		/// </summary>
		/// <param name="minValue">The inclusive lower bound of the random double returned.</param>
		/// <returns></returns>
		public static double GreaterThan(this INext<double> next, double minValue)
		{
			if (next == null)
			{
				throw new ArgumentNullException("next");
			}
			return next.Between(minValue, double.MaxValue);
		}

		#endregion

		#region float

		/// <summary>
		/// Returns a random float greater than the specified minimum.
		/// </summary>
		/// <param name="minValue">The inclusive lower bound of the random float returned.</param>
		/// <returns></returns>
		public static float GreaterThan(this INext<float> next, float minValue)
		{
			if (next == null)
			{
				throw new ArgumentNullException("next");
			}
			return next.Between(minValue, float.MaxValue);
		}

		#endregion

		#region decimal

		/// <summary>
		/// Returns a random decimal greater than the specified minimum.
		/// </summary>
		/// <param name="minValue">The inclusive lower bound of the random decimal returned.</param>
		/// <returns></returns>
		public static decimal GreaterThan(this INext<decimal> next, decimal minValue)
		{
			if (next == null)
			{
				throw new ArgumentNullException("next");
			}
			return next.Between(minValue, decimal.MaxValue);
		}

		#endregion

		#region DateTime

		/// <summary>
		/// Returns a random DateTime greater than the specified minimum age.
		/// </summary>
		/// <param name="minValue">The inclusive lower bound of the random DateTime returned.</param>
		/// <returns></returns>
		public static DateTime GreaterThan(this INext<DateTime> next, DateTime minValue)
		{
			if (next == null)
			{
				throw new ArgumentNullException("next");
			}
			return next.Between(minValue, DateTime.MaxValue);
		}

		#endregion
	}
}
